import { createI18n } from 'vue-i18n'
import { Locale } from 'vant'
import { createPinia } from 'pinia'
import { storeToRefs } from 'pinia'
import { useAppStore } from '@/stores/app'

// Import Vant locales
import zhCN from 'vant/es/locale/lang/zh-CN'
import enUS from 'vant/es/locale/lang/en-US'
import zhTW from 'vant/es/locale/lang/zh-TW'

// Import app locales
import appZhCN from '@/i18n/lang/zh-CN'
import appEnUS from '@/i18n/lang/en-US'
import appZhTW from '@/i18n/lang/zh-TW'

// Import page-specific locales
import pagesHomeZhCN from '@/i18n/pages/home/zh-CN'
import pagesHomeEnUS from '@/i18n/pages/home/en-US'
import pagesHomeZhTW from '@/i18n/pages/home/zh-TW'

/**
 * 说明：
 * /src/i18n/lang 下的文件为应用的全局国际化内容
 * /src/i18n/pages 下的文件为各页面的国际化内容
 */
const messages = {
    'zh-CN': {
        ...zhCN,
        message: {
            ...appZhCN,
            ...pagesHomeZhCN,
            // 添加更多中文翻译
        },
    },
    'en-US': {
        ...enUS,
        message: {
            ...appEnUS,
            ...pagesHomeEnUS,
            // 添加更多英文翻译
        },
    },
    'zh-TW': {
        ...zhTW,
        message: {
            ...appZhTW,
            ...pagesHomeZhTW,
            // 添加更多繁体中文翻译
        },
    },
}

// 创建 pinia 实例
const pinia = createPinia()
// 读取 pinia 中的默认语言设置
const appStore = useAppStore(pinia)
const { locale } = storeToRefs(appStore)

// 创建 i18n 实例
export const i18n = createI18n({
    legacy: false,
    locale: locale.value || 'zh-CN',
    fallbackLocale: 'zh-CN',
    messages,
    silentTranslationWarn: true,
    missingWarn: false,
    silentFallbackWarn: true,
    fallbackWarn: false,
})

// 监听语言变化，同步更新 Vant 的语言设置
export function setupI18n(app) {
    app.use(i18n)

    // 初始设置 Vant 语言
    Locale.use(locale.value || 'zh-CN', messages[locale.value || 'zh-CN'])

    // 当语言变化时，同步更新 Vant 的语言
    appStore.$subscribe((mutation, state) => {
        if (state.locale) {
            Locale.use(state.locale, messages[state.locale])
            i18n.global.locale.value = state.locale
        }
    })
}

export default setupI18n
